package com.dys.testjdk14;

/**
 * @className: com.dys.testjdk14.RecordTest
 * @description: Record记录类型
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/09/08 下午10:45
 */
public class RecordTest {
    /**
     * 这是一个main()方法,是应用程序的入口
     *
     * @param args 方法的形参列表,是一个字符串数组,包含了从命令行传递给程序的参数
     */
    public static void main(String[] args) {
        Student s1 = new Student(1, "李思思", 24);
        System.out.println(s1);
        System.out.println(s1.name());
        s1.eat();
        Student.methodA();
        Student.setName("李晓霞");
        Student s2 = new Student(1, "李思思", 24);
        System.out.println(s1);
        System.out.println(s1 == s2);
        System.out.println("比较两个记录类的内容是否相等：" + s1.equals(s2));
        System.out.println("s1的hashCode值：" + s1.hashCode());
        System.out.println("s2的hashCode值：" + s2.hashCode());
    }
}

// 内部的属性相当于被private final修饰
record Student(int id, String name, int age) {
    // 定义额外的变量必须是静态的,不能定义成员变量
    private static String pName;

    public void eat() {
        System.out.println("Record吃的方法......");
    }

    public static void setName(String name) {
        Student.pName = name;
    }

    // 可以定义其他静态方法
    public static void methodA() {
        System.out.println("methoA");
    }

    public Student {
        System.out.println("记录类构造器......");
    }
}
// class Student {
//     private Integer id;
//     private String name;
//     private Integer age;
//
//     // get、set、构造器、hashcode、equals等
//     public Student() {
//     }
//
//     public Student(Integer id, String name, Integer age) {
//         this.id = id;
//         this.name = name;
//         this.age = age;
//     }
//
//     public Integer getId() {
//         return id;
//     }
//
//     public void setId(Integer id) {
//         this.id = id;
//     }
//
//     public String getName() {
//         return name;
//     }
//
//     public void setName(String name) {
//         this.name = name;
//     }
//
//     public Integer getAge() {
//         return age;
//     }
//
//     public void setAge(Integer age) {
//         this.age = age;
//     }
//
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (!(o instanceof Student s)) return false;
//         return Objects.equals(id, s.id) && Objects.equals(name, s.name) && Objects.equals(age, s.age);
//     }
//
//     @Override
//     public int hashCode() {
//         return Objects.hash(id, name, age);
//     }
//
//     @Override
//     public String toString() {
//         return "Student{" +
//                 "id=" + id +
//                 ", name='" + name + '\'' +
//                 ", age=" + age +
//                 '}';
//     }
// }